class Solution {
public:
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {

        
        unordered_set<int> us1;
        unordered_set<int> us2;

        // 用unordered_set对nums1中的元素去重
        for(auto e : nums1)
            us1.insert(e);

        // 用unordered_set对nums2中的元素去重
        for(auto e : nums2)
            us2.insert(e);


        // 下面是我自己的解法
        // unordered_map<int, int> um;
        // for(auto e : us1)
        //     um[e]++;
        // for(auto e : us2)
        //     um[e]++;

        // vector<int> v;
        // for(auto e : um)
        // {
        //     if(e.second == 2)
        //         v.push_back(e.first);
        // }
        // return v;

        // 下面是讲解的解法
        // 遍历us1，在us2中查找是否存在
        // 因为上面已经都去重了，所以不会存在重复的情况
        vector<int> v;
        for(auto e : us1)
        {
            if(us2.find(e) != us2.end())
            {
                v.push_back(e);
            }
        }
        return v;
    }
};